# _*_ coding: UTF-8 _*_
# @Time     : 2021/11/1 11:37
# @Author   : 郑鲁明
# @Site     : http://www.hzdledu.cn/
# @File     : 内嵌页面、单选复选框、切换窗口、上传文件.py
# @Software : PyCharm
from selenium import webdriver
from selenium.webdriver.support.select import Select  # 导入下拉菜单类
import time



# 下拉菜单操作
# 有各种不同的下拉菜单，有JS做的，还有标准的HTML的<select>定义的
# js定义的下拉菜单，只能模拟用户的操作行为
# <select>定义的下拉菜单，除了可以通过模拟用户行为之外，也可以<selenium>的<select>类来操作
def foo1():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('file:///D:/workspace/hz_t2/web_d2/example.html')
    time.sleep(1)

    # 可以直接click下拉菜单的option
    driver.find_element_by_xpath('//*[@id="Selector"]/option[2]').click()
    time.sleep(2)

    # 通过select类操作下拉菜单
    element = driver.find_element_by_id('Selector')  # 找到下拉菜单元素
    select = Select(element)  # 用select生成Select类对象

    # 调用Select类的方法
    select.select_by_visible_text('香蕉')  # 1.根据选项的可见文本进行选择
    time.sleep(2)

    select.select_by_index(3)  # 2.根据选项的index的值，从零开始
    time.sleep(2)

    select.select_by_value('grape')  # 3.根据选项的value属性选择
    time.sleep(2)

    driver.quit()


# 上传文件
# 1.上传按键是<input>:直接对<input>将文件路径sendkeys
# 2.上传按键不是input:https://www.cnblogs.com/qiushi9/p/9254810.html
def foo2():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('file:///D:/workspace/hz_t2/web_d2/example.html')

    time.sleep(2)
    driver.find_element_by_name('attach[]').send_keys(r'D:\Users\Pictures\Saved Pictures\QQ图片20211020112920.jpg')

    time.sleep(2)

    driver.quit()


# 弹出框单选复选框
def foo3():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('file:///D:/workspace/hz_t2/web_d2/example.html')
    # 弹出框的操作
    # 1.alert弹出框
    driver.find_element_by_name('alterbutton').click()
    time.sleep(1)
    # 切换并获取弹出框对象
    alert = driver.switch_to.alert
    time.sleep(2)
    # 调用对象的方法
    alert.accept()  # 点击确定
    time.sleep(2)

    # 2.confirm弹出框
    driver.find_element_by_name('confirmbutton').click()
    time.sleep(1)
    # 切换并获取弹出框对象
    confirm = driver.switch_to.alert
    confirm.dismiss()
    time.sleep(1)
    confirm.accept()
    time.sleep(1)

    # 3.prompt弹出框
    driver.find_element_by_name('promptbutton').click()
    # 切换并获取弹出框对象
    prompt = driver.switch_to.alert
    time.sleep(1)
    # 输入内容
    prompt.send_keys('nmd,wsm')
    time.sleep(1)
    # 确认
    prompt.accept()
    time.sleep(1)
    # 再次确认
    prompt.accept()
    time.sleep(1)

    time.sleep(2)
    driver.quit()


# 复选框checkbox操作
def foo4():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('file:///D:/workspace/hz_t2/web_d2/example.html')

    is_select = driver.find_element_by_id('web').is_selected()
    print(is_select)
    # 直接通过id找到元素点击
    time.sleep(1)
    driver.find_element_by_id('web').click()

    # 获取勾选框的选中状态，判断某些勾选框是否已经选中，来选择是否需要点击勾选框
    is_select = driver.find_element_by_id('web').is_selected()
    print(is_select)  # 返回true值

    time.sleep(1)
    driver.quit()


# 内嵌页面iframe操作
# 在底层html网页内嵌了另一个html网页  eg:网页云音乐
# 要操作iframe标签内的元素，必须先切换页面焦点到iframe标签
def foo5():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://music.163.com/#/discover/toplist?id=3778678')
    time.sleep(2)

    # 切换到iframe
    # 切换方式3种：
    # 1.按照iframe的id或name属性   ☆
    # 2.根据iframe的index
    # 3.根据iframe元素            ☆
    driver.switch_to.frame('g_iframe')  # 根据ID

    driver.find_element_by_xpath(
        "//*[@id='song-list-pre-cache']/div[1]/div[1]/table/tbody/tr[2]/td[2]/div[1]/div[1]/span").click()

    # 需要分层跳转，跨父类切换得返回先辈再切换
    # driver.switch_to.parent_frame()  # 切换到上一层网页
    # driver.switch_to.default_content() # 切换到根网页

    time.sleep(5)
    driver.quit()


# 多窗口切换
def foo6():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://news.baidu.com/')
    time.sleep(1)

    for i in range(1, 7):
        driver.find_element_by_xpath(f'//*[@id="pane-news"]/div/ul/li[{i}]').click()
        time.sleep(1)

    # 获取当前浏览器的所有窗口句柄
    handles = driver.window_handles
    for handle in handles:
        driver.switch_to.window(handle)  # 根据句柄切换窗口
        url = driver.current_url  # 获取url
        if url == 'https://mp.weixin.qq.com/s/d4fwM1328aQuVnyOxVLT3A':
            break
        time.sleep(1)
    print(handles)

    time.sleep(2)
    driver.quit()

from selenium.webdriver.common.keys import Keys # 特殊按键类导入

# 翻页
def foo7():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://news.baidu.com/')

    driver.find_element_by_xpath('/html').send_keys(Keys.HOME)
    # key.HOME 返回顶部
    # key.ARROW_DOWN 数字下箭头
    time.sleep(1)




    driver.quit()


if __name__ == '__main__':
    # foo1()
    # foo2()
    # foo3()
    # foo4()
    # foo5()
    # foo6()
    foo7()
